package com.me.flow.service;

import com.me.flow.dto.ClaimTaskRequest;
import com.me.flow.dto.FlowDto;
import com.me.flow.dto.PendingTaskDto;
import com.me.flow.dto.ReAssginTaskRequest;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.task.Task;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * 工作流服务
 * @author markliu
 * @since 2021-08-01
 */
@Service("flowService")
public interface FlowService {

    /**
     * 开启一个流程
     * @param flowDto,properties
     * flowDto表示流程基本入参，map为业务自定义变量入参
     * @return
     */
    Map<String,Object> startProcessInstance(FlowDto flowDto, Map<String, String> properties);

    /**
     * 2021年4月9日
     * 任务领取
     * @param request
     * @return
     */
    boolean claimTask(ClaimTaskRequest request);

    /**
     * 2021年4月9日
     * 任务转派
     * @param request
     * @return
     */
    void reAssignTask(ReAssginTaskRequest request);

    /**
     * 任务暂存
     * @param taskDto
     * @param properties
     */
    void saveTask(PendingTaskDto taskDto,Map<String, String> properties);

    /**
     * 办结任务
     * @param properties
     * @return
     */
    void finishTask(PendingTaskDto taskDto, Map<String, String> properties);

    /**
     * 待办任务列表
     */
    List<PendingTaskDto> pendingTaskList(Map<String, Object> paramMap);

    /**
     * 待办任务列表（原生）
     * @param processInstanceId
     * @param processInstanceBusinessKey
     * @param assignee
     * @return
     */
    List<Task> queryTaskList(String processInstanceId,String processInstanceBusinessKey,String assignee);

    /**
     * 获取单个执行中的任务
     * @param processInstanceId
     * @param processInstanceBusinessKey
     * @param taskId
     * @return
     */
    Task querySingleTask(String processInstanceId,String processInstanceBusinessKey,String taskId);

    /**
     * 根据piid或者taskId获取业务单号
     * @param piid
     * @param taskId
     * @return
     */
    String queryBusinessKey(String piid,String taskId);

    /**
     * 获取流程记录日志
     * @param piid
     * @return
     */
    List<HistoricTaskInstance> queryTaskHistory(String piid);

}
